T18 and a fourth post: a repair reaches only the copy it lands in - #712
Merged
Conversation
Sixteen defects were repaired in one package last night and the consumer that depends on it did not improve by a single error. Both repositories carried their own src/vsa/core.zig and five siblings, edited independently since the migration that split them, so the fixes went into different files with the same names. No instrument reported it, because each copy compiles entirely on its own. Parnas gave the criterion in 1972 and gave changeability as the reason: each design decision should have exactly one home. The corollary is arithmetic. A decision living in n places is repaired n times, the repairs do not propagate, and neither build can see that the other exists. Divergence is not a risk duplication carries; it is what duplication is. Choosing which copy to keep stopped being a judgement after five minutes of measurement: the two public surfaces are identical, one constant apart. Nothing is lost by keeping either, so the direction follows the dependency that already exists. Replacing the duplicates with re-exports took the consumer from five errors to green, with the whole public surface analysed rather than only the part its tests walk. The theorem states what it does not claim as well: vendoring is a defensible trade when it is chosen and written down, and a re-export is not free either, because names must be listed one by one now that usingnamespace is gone. The post carries the same material for a reader who is not looking at a theorem list, in both languages, with the three open questions that remain -- the original consumer is still red, the re-export has a maintenance cost, and whether the eighteen files left behind belong upstream was not decided.
github-actions Bot
added a commit
that referenced
this pull request
Aug 11, 2026
T18 and a fourth post: a repair reaches only the copy it lands in (#712) Sixteen defects were repaired in one package last night and the consumer that depends on it did not improve by a single error. Both repositories carried their own src/vsa/core.zig and five siblings, edited independently since the migration that split them, so the fixes went into different files with the same names. No instrument reported it, because each copy compiles entirely on its own. Parnas gave the criterion in 1972 and gave changeability as the reason: each design decision should have exactly one home. The corollary is arithmetic. A decision living in n places is repaired n times, the repairs do not propagate, and neither build can see that the other exists. Divergence is not a risk duplication carries; it is what duplication is. Choosing which copy to keep stopped being a judgement after five minutes of measurement: the two public surfaces are identical, one constant apart. Nothing is lost by keeping either, so the direction follows the dependency that already exists. Replacing the duplicates with re-exports took the consumer from five errors to green, with the whole public surface analysed rather than only the part its tests walk. The theorem states what it does not claim as well: vendoring is a defensible trade when it is chosen and written down, and a re-export is not free either, because names must be listed one by one now that usingnamespace is gone. The post carries the same material for a reader who is not looking at a theorem list, in both languages, with the three open questions that remain -- the original consumer is still red, the re-export has a maintenance cost, and whether the eighteen files left behind belong upstream was not decided.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sixteen defects repaired in one package last night, and the consumer that depends on it did not improve by a single error. Both repositories carried their own
src/vsa/core.zigand five siblings, edited independently since the migration that split them — the fixes went into different files with the same names. No instrument reported it, because each copy compiles entirely on its own.T18 — Parnas (1972) gave the criterion and gave changeability as the reason: each design decision should have exactly one home. The corollary is arithmetic. A decision living in n places is repaired n times, the repairs do not propagate, and neither build can see that the other exists. Divergence is not a risk duplication carries; it is what duplication is.
Choosing which copy to keep stopped being a judgement after five minutes of measurement: the two public surfaces are identical, one constant apart. Replacing the duplicates with re-exports took the consumer from five errors to green (gHashTag/zig-hdc#3), with the whole surface analysed rather than only the part its tests walk.
What it does not claim: vendoring is a defensible trade when chosen and written down; a re-export is not free either, since names must be listed one by one now that
usingnamespaceis gone.The fourth blog post carries the same material for a reader who is not looking at a theorem list — both languages, with three open questions: the original consumer is still red, the re-export has a maintenance cost, and whether the eighteen files left behind belong upstream was not decided.